package com.sisgesbyte.web.managedBean.proyeccion;

import java.io.Serializable;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.dao.beanDao.FiltrosBean;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.services.administracion.MantenimientoCategoriaCliente;
import com.sisgesbyte.services.administracion.bean.CategoriaClienteBean;
import com.sisgesbyte.services.administracion.bean.CategoriaClienteListaRes;
import com.sisgesbyte.services.administracion.bean.ZonaBean;
import com.sisgesbyte.services.proyeccion.MantProyeccionCanalService;
import com.sisgesbyte.services.proyeccion.bean.FiltroOpcionesCanalBean;
import com.sisgesbyte.services.proyeccion.bean.ListaProyCanalMarcasResponse;
import com.sisgesbyte.services.proyeccion.bean.ProyeccionGeneralMarcasBean;
import com.sisgesbyte.services.ventas.MantenimientoPeriodo;
import com.sisgesbyte.services.ventas.MantenimientoZona;
import com.sisgesbyte.services.ventas.bean.PeriodoBean;
import com.sisgesbyte.services.ventas.bean.PeriodoListaBean;
import com.sisgesbyte.services.ventas.bean.ZonaListaResponse;

@ManagedBean
@ViewScoped
public class ResumenProyCanalMarcasMBean implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@EJB
	private MantProyeccionCanalService mantProyeccionCanalService;
	@EJB
	private MantenimientoPeriodo mantenimientoPeriodo;
	@EJB
	private MantenimientoZona mantenimientoZona;
	@EJB
	private MantenimientoCategoriaCliente mantenimientoCategoriaCliente;
	private List<ProyeccionGeneralMarcasBean> listaProyeccionCanalMarcas;
	private List<CategoriaClienteBean> listaCategoriaCliente;
	private List<ZonaBean> listaZonas;
	private List<PeriodoBean> listaPeriodos;
	private int periodoDefault;
	private int idZona;
	private int idCanal;
	private String  totalMarcas;
	
	@PostConstruct
	private void init() {
		cargarPeriodos();
		mostrarPeriodoDefault();
		cargarZonas();
		cargarCanales();
		inicializar();
	}
	public void inicializar(){
		totalMarcas="";
		try{
			if(periodoDefault > 0 && idZona > 0 && idCanal > 0){
				BigDecimal totalM =  BigDecimal.ZERO;
				FiltroOpcionesCanalBean filtrosSQL = new FiltroOpcionesCanalBean();
				filtrosSQL.setCanalId(idCanal);
				filtrosSQL.setPeriodoId(periodoDefault);
				filtrosSQL.setZonaId(idZona);
				filtrosSQL.setTxtBuscar("");
				ListaProyCanalMarcasResponse response = mantProyeccionCanalService.mostrarProyCanalMarcas(ObtenerIdTransaccion(), filtrosSQL);
				if(response.getCodigoRespuesta().equalsIgnoreCase(ConstantesInternasSistema.CODIGO_EXITO)){
					this.listaProyeccionCanalMarcas = response.getListaProyeccionCanalMarcas();
					for(ProyeccionGeneralMarcasBean ls : listaProyeccionCanalMarcas){
						totalM = totalM.add(ls.getMontoTotal());
					}
					DecimalFormatSymbols simbolo=new DecimalFormatSymbols();
				    simbolo.setDecimalSeparator('.');
				    simbolo.setGroupingSeparator(',');
				    DecimalFormat formateador = new DecimalFormat("###,###.##",simbolo);
					totalMarcas = formateador.format(totalM.setScale(3, BigDecimal.ROUND_HALF_UP));
					
				}else{
					this.listaProyeccionCanalMarcas = new ArrayList<ProyeccionGeneralMarcasBean>();
				}
			}else{
				this.listaProyeccionCanalMarcas = new ArrayList<ProyeccionGeneralMarcasBean>();
				System.out.println("Debe seleccionar periodo, zona y canal");
			}
		}catch(Exception e){
			System.out.println("Error al obtener la lista de marcas " +  e);
			this.listaProyeccionCanalMarcas = new ArrayList<ProyeccionGeneralMarcasBean>();
		}
	}
	public void cargarPeriodos() {
		try {
			PeriodoListaBean periodos = mantenimientoPeriodo.listaPeriodos(ObtenerIdTransaccion());
			this.listaPeriodos = periodos.getListaPeriodos();
		} catch (Exception e) {
			System.out.println("Error al cargar los periodos: " + e);
		}
	}

	public void mostrarPeriodoDefault() {
		for (PeriodoBean ls : getListaPeriodos()) {
			if (ls.getDefecto() != null && ls.getDefecto() == true) {
				setPeriodoDefault(ls.getId());
			}
		}
	}
	public void cargarZonas(){
		try{
			FiltrosSQLBean filtro= new FiltrosSQLBean();
			 List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			 FiltrosBean filtroCampos = new FiltrosBean();
			 List<String> campos = new ArrayList<String>();
			 campos.add("active");
			 filtroCampos.setCampos(campos);
			 filtroCampos.setOperador("=");
			 listaFiltros.add(filtroCampos);
			 List<Object> valores = new ArrayList<Object>();
			 valores.add(true);
			 filtro.setListaFiltros(listaFiltros);
			 filtro.setListaValores(valores);
			ZonaListaResponse zonas = mantenimientoZona.listaZonas(ObtenerIdTransaccion(), filtro);
			if(zonas.getCodigoRespuesta().equalsIgnoreCase(ConstantesInternasSistema.CODIGO_EXITO)){
				this.listaZonas =zonas.getListaZonas();
			}
			
		}catch(Exception e){
			System.out.println("Error al obtener las zonas: " + e);
		}
	}
	public void cargarCanales(){
		try{
			 FiltrosSQLBean filtro= new FiltrosSQLBean();
			 List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			 FiltrosBean filtroCampos = new FiltrosBean();
			 List<String> campos = new ArrayList<String>();
			 campos.add("active");
			 filtroCampos.setCampos(campos);
			 filtroCampos.setOperador("=");
			 listaFiltros.add(filtroCampos);
			 List<Object> valores = new ArrayList<Object>();
			 valores.add(true);
			 filtro.setListaFiltros(listaFiltros);
			 filtro.setListaValores(valores);
			 CategoriaClienteListaRes canales = mantenimientoCategoriaCliente.listaCategoriaCliente(ObtenerIdTransaccion(), filtro);
			if(canales.getCodigoRespuesta().equalsIgnoreCase(ConstantesInternasSistema.CODIGO_EXITO)){
				this.listaCategoriaCliente =canales.getListaCategoriaCliente();
			}else{
				this.listaCategoriaCliente =new ArrayList<CategoriaClienteBean>();
			}
			
		}catch(Exception e){
			System.out.println("Error al listar canales");
			this.listaCategoriaCliente =new ArrayList<CategoriaClienteBean>();
		}
	}
	public String ObtenerIdTransaccion() {
		FacesContext fCtx = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) fCtx.getExternalContext()
				.getSession(false);
		String sessionId = session.getId().replace(".undefined", "");
		return sessionId;
	}
	public int getPeriodoDefault() {
		return periodoDefault;
	}

	public void setPeriodoDefault(int periodoDefault) {
		this.periodoDefault = periodoDefault;
	}

	public int getIdZona() {
		return idZona;
	}

	public void setIdZona(int idZona) {
		this.idZona = idZona;
	}

	public int getIdCanal() {
		return idCanal;
	}

	public void setIdCanal(int idCanal) {
		this.idCanal = idCanal;
	}
	public List<ZonaBean> getListaZonas() {
		return listaZonas;
	}
	public void setListaZonas(List<ZonaBean> listaZonas) {
		this.listaZonas = listaZonas;
	}
	public List<PeriodoBean> getListaPeriodos() {
		return listaPeriodos;
	}
	public void setListaPeriodos(List<PeriodoBean> listaPeriodos) {
		this.listaPeriodos = listaPeriodos;
	}
	public List<CategoriaClienteBean> getListaCategoriaCliente() {
		return listaCategoriaCliente;
	}
	public void setListaCategoriaCliente(
			List<CategoriaClienteBean> listaCategoriaCliente) {
		this.listaCategoriaCliente = listaCategoriaCliente;
	}
	public List<ProyeccionGeneralMarcasBean> getListaProyeccionCanalMarcas() {
		return listaProyeccionCanalMarcas;
	}
	public void setListaProyeccionCanalMarcas(
			List<ProyeccionGeneralMarcasBean> listaProyeccionCanalMarcas) {
		this.listaProyeccionCanalMarcas = listaProyeccionCanalMarcas;
	}
	public String getTotalMarcas() {
		return totalMarcas;
	}
	public void setTotalMarcas(String totalMarcas) {
		this.totalMarcas = totalMarcas;
	}
	

}
